<?php
namespace Index\Controller;
use Think\Controller;
class SearchController extends CommonController {
	// 分词搜索方法，将搜索数据扔给FC方法，通过FC方法配置好设置扔给分词类去词库里匹配对应词语。FC方法里配置了词典路径和字符集，规则等等，词典放在路径比较好找的地方，随便放哪里，但是因为要配置路径，所以放在容易找到的地方
    public function indexAction(){
    	// q是前端页面上搜索框的名字，接到了用户搜索的内容
    	$q = I('get.q','');
    	//empty是空，！empty是非空，如果非空，也就是搜索的内容词库里有，那么就将搜索内容存到数组里扔进词库匹配,FC是词库分词方法，写在Common/Common/function.php里
    	if(!empty($q)){
    		$arr = FC($q);
    		//如果搜索的词词库里没有，那么就不分词了，直接将搜索的词整个追加到数组中，让它直接展示在页面
    		if(empty($arr)){
    			$arr[]=$q;
    		}

    		$sql = "select * from question where";
    		//遍历搜索分词数组,分别去数据库中用like查询相似的词，$sql .= " title like '%{$v}%'"也就是$sql = "select * from question where title like '%{$v}%'";$sql = "select * from question where title like '%{$v}%' or"也就是$sql = "select * from question where title like '%{$v}%' or like '%{$v}%' or";因为这条sql语句最后有个or查询多个相似词语，如果有1个以上的词，2个词，3个词时，执行的sql语句是$sql = "select * from question where title like '%{$v}%' or like '%{$v}%' or"，最后有个or这是一条错误的sql语句，所以做个判断，如果搜词数量是count($arr)-1时，就走$sql = "select * from question where title like '%{$v}%'";这条sql语句，否则就走$sql = "select * from question where title like '%{$v}%' or";这条语句它会执行成多个词语搜索。因为数组的key是0,1,2这样，数组的数量count是1,2,3这样，那么key=count-1
    		foreach ($arr as $key => $v) {
    			if($key==(count($arr)-1)){
    				$sql .= " title like '%{$v}%'";
    			}else{
    				$sql .= " title like '%{$v}%' or";
    			}
    		}

    		$res = M()->query($sql);

    		foreach ($res as &$value) {
    			foreach ($arr as $v) {
    				//搜索到的关键字飘红效果，str_ireplace替换成红色字体
    				$value['title'] = str_ireplace($v, "<span style='color:red'>".$v."</span>", $value['title']);
    			}
    		}

    		$countnum  = count($res);
    		
    		// var_dump($res);exit;
    		$this->assign('countnum',$countnum);
    		$this->assign('res',$res);
    		$this->display();

    		
    	}else{
    		$this->error('非法请求',U('index/index/index'));
    	}
        // 
    }
} 